import axios, { AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse } from "axios";
import { ElMessage, ElMessageBox } from 'element-plus';

import { Session } from '@/utils/storage';

axios.defaults.timeout = 10000;
axios.defaults.baseURL='/api'
// 请求拦截器
axios.interceptors.request.use((config:AxiosRequestConfig) => {

    // 是否具有token
    const token = Session.get('token')
    if(token) {
      config.headers.common['Authorization'] = token;
    }
    // 在发送请求之前做些什么
    return config;
  }, (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 响应拦截器
axios.interceptors.response.use((response: AxiosResponse<{code: number, msg: string, data: any}>) => {
    const {data}= response

    // 登录验证失效处理
    if (data.code === 401 || data.code === 4001) {
      Session.clear(); // 清除浏览器全部临时缓存
      window.location.href = '/'; // 去登录页
      ElMessageBox.alert('你已被登出，请重新登录', '提示', {});
      return
    }

    return Promise.resolve(data)
  },
  error => {
    console.log('请求拦截失败数据', error);
    return Promise.reject(error.response);
  }
);

export default axios